"""
面向对象介绍
    相比函数，面向对象是更大的封装，根据职责在一个对象中封装多个方法
    - 在完成某一个需求前，首先确定职责 -- 要做的事情
    - 根据职责确定不同的对象，在对象内部封装不同的方法
    - 最后完成的代码，就是顺序的让不同的对象调用不同的方法

特点：
    - 注意对象和职责，不同的对象承担不同的职责
    - 更加适合应对复杂的需求变化，是专门应对复杂项目开发，提供固定的套路
    - 需要在面向过程基础上，在学习一些面向对象的语法

类和对象
    类和对象是面向对象编程的两个核心概念
类
    类是对一群具有相同特征或者行为的事物的一个统称，是抽象的，不能直接使用
        - 特征被称为属性
        - 行为被称为方法
    类就相当于制造飞机时的图纸，是一个模板，是负责创建对象的
对象
    对象是由类创建出来的一个具体存在，可以直接使用
    由哪一个类创建出来的对象，就拥有在哪一个类型定义的：
        - 属性和方法
    对象就相当于用图纸制造的飞机
* 在程序开发中，应该先有类，再有对象

类和对象的关系
    - 类是模板，对象是根据类这个模板创建出来的，应该先有类，再有对象
    - 类只有一个，而对象可以由很多个
        不同对象之间的属性可能各不相同
    - 类中定义了什么属性和方法，对象中就有什么属性和方法，不能多也不能少

类的设计：类名需要满足大驼峰命名法：
    - 每一个单词的首字母大写
    - 单词与单词之间没有下划线

面向对象语法
1 了解 Python 的 dir 内置函数
    使用 内置函数 dir 传入标识符或数据，可以查看对象内的所有属性及方法
    注意：__方法名__ 格式的方法是 Python 提供的内置方法或属性
        __new__ 创建对象时会自动调用的方法
        __init__ 对象被初始化时会自动调用的方法 类似 Java 中类的构造函数
        __del__ 对象会被从内存中销毁前自动调用的方法
        __str__ 返回对象的描述信息，print 方法会调用 类似 Java 中对象的 toString()

2 定义类
    class 类名:
        类中的方法，注意 方法的第一个参数必须是 self

    注意：
    self 说明
        - 在类封装的方法内部，self 就表示当前调用方法的对象自己
        - 调用方法时，程序员不需要传递 self 参数
        - 在方法内部，既可以通过 self.属性名 访问对象的属性，也可以通过 self.方法名() 调用对象的方法
    建议使用初始化方法给对象的属性赋值，不建议在类的外部给对象的属性赋值
        对象的初始化方法，当使用 类名() 创建对象时，会自动执行以下操作：
            - 为对象在内存中分配空间 -- 创建对象
            - 为对象的属性设置初始值 -- 初始化方法 (init)
                这个初始化方法就是 __init__ 方法，这个方法是对象的内置方法

3 创建对象
    对象变量 = 类名()
面向对象的三大特性：
    封装 根据职责将属性和方法封装到一个抽象的类中
    继承 实现代码的重用，相同的代码不需要重复的编写
    多态 不同的对象调用相同的方法，产生不同的执行结果，增加代码的灵活度
"""
